package com.lzq.FactoryPattern;

public class Factory_method {
    //抽象产品：提供了产品的接口
    interface Product {
        public void show();
    }
    //具体产品1：实现抽象产品中的抽象方法
    class Product01 implements Product {
        public void show() {
            System.out.println("生产产品01");
        }
    }
    //具体产品2：实现抽象产品中的抽象方法
    class Product02 implements Product {
        public void show() {
            System.out.println("生产产品02");
        }
    }

    //抽象工厂：提供了厂品的生成方法
    interface AbstractFactory {
        public Product newProduct();
    }
    //具体工厂1：实现了厂品的生成方法
    class Factory01 implements AbstractFactory {
        public Product newProduct() {
            return new Product01();
        }
    }
    //具体工厂2：实现了厂品的生成方法
    class Factory02 implements AbstractFactory {
        public Product newProduct() {
            return new Product02();
        }
    }
    public static void main(String[] args){
        Factory_method factory_method = new Factory_method();
        AbstractFactory factory01 = factory_method.new Factory01();
        factory01.newProduct().show();
        AbstractFactory factory02 = factory_method.new Factory02();
        factory02.newProduct().show();
    }
}
